#!/usr/bin/env node

/**
 * 为用户创建正确格式的Excel模板
 */

const XLSX = require('xlsx');
const fs = require('fs');
const path = require('path');

class UserTemplateCreator {
  constructor() {
    this.baseDir = '/Users/andylau/Dropbox/AppDevelopment/CMB250716';
  }

  log(message, type = 'info') {
    const timestamp = new Date().toISOString();
    const prefix = {
      'info': '🔍',
      'success': '✅',
      'error': '❌',
      'fix': '🔧'
    }[type] || 'ℹ️';
    console.log(`${prefix} [${timestamp}] ${message}`);
  }

  createUserTemplate() {
    this.log('创建用户Excel导入模板');
    
    const workbook = XLSX.utils.book_new();
    
    // Dishes工作表 - 包含示例数据和说明
    const dishesHeaders = [
      'dish_sku',
      'dish_slug', 
      'name_zh',
      'name_en',
      'category',
      'base_status',
      'description_zh',
      'description_en',
      'ingredients_zh',
      'ingredients_en',
      'tags',
      'popularity'
    ];
    
    const dishesData = [
      dishesHeaders,
      [
        'YOUR_SKU_001',
        'your-dish-slug-001',
        '您的菜品中文名',
        'Your Dish English Name',
        '主食',
        'active',
        '您的菜品中文描述',
        'Your dish English description',
        '主要配料1,配料2,配料3',
        'Ingredient1, Ingredient2, Ingredient3',
        '热门,新品',
        '85'
      ],
      [
        'YOUR_SKU_002',
        'your-dish-slug-002',
        '您的第二个菜品',
        'Your Second Dish',
        '饮品',
        'active',
        '第二个菜品的描述',
        'Description of second dish',
        '水,糖,柠檬',
        'Water, Sugar, Lemon',
        '清爽',
        '75'
      ]
    ];
    
    const dishesWS = XLSX.utils.aoa_to_sheet(dishesData);
    
    // 设置列宽
    dishesWS['!cols'] = [
      { wch: 15 }, // dish_sku
      { wch: 20 }, // dish_slug
      { wch: 20 }, // name_zh
      { wch: 25 }, // name_en
      { wch: 10 }, // category
      { wch: 12 }, // base_status
      { wch: 30 }, // description_zh
      { wch: 35 }, // description_en
      { wch: 25 }, // ingredients_zh
      { wch: 30 }, // ingredients_en
      { wch: 15 }, // tags
      { wch: 10 }  // popularity
    ];
    
    XLSX.utils.book_append_sheet(workbook, dishesWS, 'Dishes');
    
    // Variants工作表
    const variantsHeaders = [
      'dish_sku',
      'name_zh',
      'variant_code',
      'variant_name',
      'price',
      'compare_at_price',
      'is_default',
      'stock'
    ];
    
    const variantsData = [
      variantsHeaders,
      [
        'YOUR_SKU_001',
        '标准',
        'STD-001',
        'Standard',
        '25.99',
        '',
        'true',
        '100'
      ],
      [
        'YOUR_SKU_001',
        '大份',
        'LRG-001', 
        'Large',
        '29.99',
        '32.99',
        'false',
        '80'
      ],
      [
        'YOUR_SKU_002',
        '中杯',
        'MED-001',
        'Medium',
        '12.99',
        '',
        'true',
        '150'
      ]
    ];
    
    const variantsWS = XLSX.utils.aoa_to_sheet(variantsData);
    
    // 设置列宽
    variantsWS['!cols'] = [
      { wch: 15 }, // dish_sku
      { wch: 15 }, // name_zh
      { wch: 15 }, // variant_code
      { wch: 20 }, // variant_name
      { wch: 10 }, // price
      { wch: 15 }, // compare_at_price
      { wch: 12 }, // is_default
      { wch: 10 }  // stock
    ];
    
    XLSX.utils.book_append_sheet(workbook, variantsWS, 'Variants');
    
    // Options工作表
    const optionsHeaders = [
      'dish_sku',
      'name_zh',
      'group_code',
      'group_name',
      'required',
      'value_code',
      'value_name',
      'price_delta'
    ];
    
    const optionsData = [
      optionsHeaders,
      [
        'YOUR_SKU_001',
        '配菜选择',
        'SIDE',
        '配菜',
        'false',
        'FRIES',
        '薯条',
        '3.00'
      ],
      [
        'YOUR_SKU_001',
        '饮料选择',
        'DRINK',
        '饮料',
        'true',
        'COKE',
        '可乐',
        '0'
      ],
      [
        'YOUR_SKU_002',
        '温度选择',
        'TEMP',
        '温度',
        'true',
        'ICE',
        '冰',
        '0'
      ]
    ];
    
    const optionsWS = XLSX.utils.aoa_to_sheet(optionsData);
    
    // 设置列宽
    optionsWS['!cols'] = [
      { wch: 15 }, // dish_sku
      { wch: 15 }, // name_zh
      { wch: 15 }, // group_code
      { wch: 15 }, // group_name
      { wch: 10 }, // required
      { wch: 15 }, // value_code
      { wch: 15 }, // value_name
      { wch: 12 }  // price_delta
    ];
    
    XLSX.utils.book_append_sheet(workbook, optionsWS, 'Options');
    
    // 创建说明工作表
    const instructionsData = [
      ['菜单导入模板使用说明'],
      [''],
      ['重要提示：'],
      ['1. 请严格按照模板格式填写数据，不要修改表头名称和顺序'],
      ['2. 必须包含三个工作表：Dishes、Variants、Options'],
      ['3. 所有工作表的表头必须完全匹配，顺序不能改变'],
      [''],
      ['Dishes工作表字段说明：'],
      ['dish_sku: 菜品SKU（必填，唯一标识）'],
      ['dish_slug: URL友好标识（必填，只能包含小写字母、数字、连字符）'],
      ['name_zh: 中文名称（必填）'],
      ['name_en: 英文名称（必填）'],
      ['category: 分类名称（必填）'],
      ['base_status: 状态（必填，只能是active或inactive）'],
      ['description_zh: 中文描述（可选）'],
      ['description_en: 英文描述（可选）'],
      ['ingredients_zh: 中文配料（可选，用逗号分隔）'],
      ['ingredients_en: 英文配料（可选，用逗号分隔）'],
      ['tags: 标签（可选，用逗号分隔）'],
      ['popularity: 热门度（可选，0-100的数字）'],
      [''],
      ['Variants工作表字段说明：'],
      ['dish_sku: 关联的菜品SKU（必填）'],
      ['name_zh: 规格中文名（可选）'],
      ['variant_code: 规格代码（必填）'],
      ['variant_name: 规格名称（必填）'],
      ['price: 价格（可选，数字）'],
      ['compare_at_price: 对比价格（可选，数字）'],
      ['is_default: 是否默认（可选，true或false）'],
      ['stock: 库存（可选，整数）'],
      [''],
      ['Options工作表字段说明：'],
      ['dish_sku: 关联的菜品SKU（必填）'],
      ['name_zh: 选项中文名（可选）'],
      ['group_code: 选项组代码（必填）'],
      ['group_name: 选项组名称（必填）'],
      ['required: 是否必选（可选，true或false）'],
      ['value_code: 选项值代码（必填）'],
      ['value_name: 选项值名称（必填）'],
      ['price_delta: 价格差异（可选，数字，可以为负数）']
    ];
    
    const instructionsWS = XLSX.utils.aoa_to_sheet(instructionsData);
    instructionsWS['!cols'] = [{ wch: 60 }];
    XLSX.utils.book_append_sheet(workbook, instructionsWS, '使用说明');
    
    const fileName = '菜单导入模板_正确格式_V2.xlsx';
    const filePath = path.join(this.baseDir, fileName);
    
    XLSX.writeFile(workbook, filePath);
    
    this.log(`用户Excel模板已创建: ${fileName}`, 'success');
    return { fileName, filePath };
  }

  run() {
    console.log('\n' + '='.repeat(80));
    console.log('📋 创建用户Excel导入模板');
    console.log('🎯 提供正确格式的模板供用户使用');
    console.log('='.repeat(80) + '\n');
    
    try {
      const { fileName, filePath } = this.createUserTemplate();
      
      console.log('\n' + '='.repeat(80));
      console.log('🎉 用户Excel模板创建成功！');
      console.log(`✅ 模板文件：${fileName}`);
      console.log(`✅ 文件位置：${filePath}`);
      console.log('');
      console.log('📋 使用说明：');
      console.log('1. 打开模板文件，查看"使用说明"工作表');
      console.log('2. 在Dishes、Variants、Options工作表中填入您的数据');
      console.log('3. 不要修改表头名称和顺序');
      console.log('4. 保存文件后即可在后台管理系统中导入');
      console.log('');
      console.log('⚠️  重要提醒：');
      console.log('- 表头顺序和名称必须完全匹配');
      console.log('- dish_sku字段用于关联三个表的数据');
      console.log('- base_status只能填写active或inactive');
      console.log('- is_default和required只能填写true或false');
      console.log('='.repeat(80) + '\n');
      
    } catch (error) {
      console.log('\n' + '='.repeat(80));
      console.log('❌ 创建用户模板失败');
      console.log('错误:', error.message);
      console.log('='.repeat(80) + '\n');
    }
  }
}

// 立即运行
if (require.main === module) {
  const creator = new UserTemplateCreator();
  creator.run();
}

module.exports = UserTemplateCreator;